#ifndef TOOLS_H
#define TOOLS_H

#include <QDataStream>
#include <QTcpSocket>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QDebug>
#include "class.h"
#include "constDefination.h"
#include <QTimer>
#include <QEventLoop>
#include <QMessageBox>

//接口
// 连接到 MySQL 数据库
QSqlDatabase connectToDatabase();
// 根据用户名查找用户信息
bool findUserByUsername(const QString &username,  User &user) ;
// 插入一个新的用户
bool insertUser(const  User &user);
// 更新用户信息
bool updateUser(const  User &user) ;
// 删除用户（根据用户名）
bool deleteUser(const QString &username);
//查询好友关系是否存在
bool isFriendExist(const QString &username1, const QString &username2);
// 插入好友关系
QString insertFriend(const QString &username1, const QString &username2) ;
// 删除好友关系（根据用户名）
QString deleteFriend(const QString &username1, const QString &username2) ;
// 添加分组
bool addGroup(const QString& username1, const QString& groupName, const QString& username2);
// 删除分组（根据分组名）
bool deleteGroupByName(const QString &groupName);
// 修改分组名
bool updateGroupName(const Group &group, const QString &newGroupName);
// 查询分组信息
bool findGroup(const Group &group);
//处理数据库类型数据
void processDatabase(const QByteArray &data,QTcpSocket *clientSocket);;
//从字节流中读取用户对象
void getUserByStream(QDataStream &in, User &user);
//发送用户数据给客户端
void sendUserData(QTcpSocket* socket, const User& user);
//从字节流中读取朋友对象
void getFriendByStream(QDataStream &in,Friend &frd);
//发送朋友数据给客户端
void sendUserData(QTcpSocket* socket, const Friend &frd);
//发送朋友数据对象
void sendFriendData(QTcpSocket* socket, const Friend &frd);
//等待指定时间
void waitForTimeout(int milliseconds);
//查找好友表
bool findFriendByUsername(const QString &username,QStringList &usernames);
// 删除指定分组名的分组，传入用户名和分组名
bool deleteGroupByName(const QString &groupName) ;
//
bool updateGroupName(const Group &group, const QString &newGroupName) ;


// 查询所有的分组名
void findGroupNameByUsername(const QString &username, QStringList &groupnames);

// 查询指定分组名
void findGroupName(const QString &username, const QString &groupname, QString &res);

// 删除分组名记录
void deleteGroupName(const QString &username, const QString &groupname, QString &res);

// 添加分组名记录
void insertGroupName(const QString &username, const QString &groupname, QString &res);

//根据指定用户查询好友
bool findFriendByUsernameAndGroupname(const QString &username, const QString &groupname, QStringList &friendnames);

//查询指定的分组记录
bool findGroup(const QString &username1, const QString &groupname, const QString &username2, QString &res);

//添加分组记录
void insertGroup(const QString &username1, const QString &groupname, const QString &username2, QString &res);

//接口：删除分组记录
void deleteGroup(const QString &username1, const QString &groupname, const QString &username2, QString &res);

#endif // TOOLS_H
